#ifndef SYMBOLE_H_
#define SYMBOLE_H_

#include <iostream>
#include <vector>
#include <string>
using namespace std;

#define FICHIER_MOTS_CLE "./data/motsCles.txt"

class Symbole
{
	public:
		enum categorieSymbole
		{
			MOTCLE, VARIABLE, ENTIER, INDEFINI, FINDEFICHIER, STRING
		};
		Symbole(string s = string("")); // construit le symbole à partir de la chaine (string) ch lue par le lecteur de symbole dans un fichier
		bool operator ==(string ch); // pour tester l'égalité entre le symbole et une chaîne
		inline bool operator !=(string ch)
		{
			return !(*this == ch);
		} // pour tester la différence...
		inline string getChaine()
		{
			return this->chaine;
		} // accesseur

		friend ostream & operator <<(ostream & cout, Symbole symb); // fonction amie pour pouvoir afficher un symbole sur cout 

	private:
		string chaine; // chaine du symbole
		categorieSymbole categorie; // categorie du symbole (voir type énuméré ci-dessus)
		static bool isMotCle(string s); // méthode de classe : renvoie vrai si s est un mot clé du langage
};

#endif /* SYMBOLE_H_ */
